"""
解题思路

这道题采用的是最简单的动态规划与贪心思路。

首先说一下传统想法，我们的反应可能是记录每个位置能到达的点分别有谁？然后依次尝试，拓展下去。
这样的坏处是费时费力，所以我们可以换一种思路，即能到达的最远位置。
因为在这到题目中，当前点可以到达最远位置内的所有点，所以我们至于要证明从头开始的最远位置大于数组最后一个元素的下标即可。

所以我们可以得到公式max(distant, i + nums[i])，distance是之前最远距离，i是下标
所以i + nums[i]是当前点的最远位置。

这里需要假如一个判断，即 if distant >= i 这样是用来作为最远点的判断的；即如果到达不了该点则程序就已经结束了


"""


class Solution:
    def canJump(self, nums: List[int]) -> bool:
        distant = nums[0]
        for i in range(1, len(nums)):
            if distant >= i:
                distant = max(distant, i + nums[i])
        return distant >= len(nums)-1